home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / lds / gen.c < prev    next >
C/C++ Source or Header  |  1995-05-03  |  3KB  |  105 lines

  1. /*************************************************************************
  2.  *                                                                       *
  3.  *  Copyright (c) 1992, 1993 Ronald Joe Record                           *
  4.  *                                                                       *
  5.  *  All rights reserved. No part of this program or publication may be   *
  6.  *  reproduced, transmitted, transcribed, stored in a retrieval system,  *
  7.  *  or translated into any language or computer language, in any form or *
  8.  *  by any means, electronic, mechanical, magnetic, optical, chemical,   *
  9.  *  biological, or otherwise, without the prior written permission of:   *
  10.  *                                                                       *
  11.  *      Ronald Joe Record (408) 458-3718                                 *
  12.  *      212 Owen St., Santa Cruz, California 95062 USA                   *
  13.  *                                                                       *
  14.  *************************************************************************/
  15.  
  16. #include "defines.h"
  17. #include "externals.h"
  18. #include "xexterns.h"
  19.  
  20. static row = 0;
  21.  
  22. /* routines in this file */
  23. void next_gen(), iterate();
  24.  
  25. /* external routines called in this file */
  26. extern int upd_lambda();
  27. extern void phasediff(), grafline(), grafgen(), adjconn(), FlushPixmap();
  28. extern double map();
  29.  
  30. /*
  31.  * next_gen() - generate the next generation and graf it.
  32.  */
  33. void
  34. next_gen()
  35. {
  36.     double **tmp;
  37.     static int i, x, y;
  38.  
  39.     iterate(currentgen, nextgen);
  40.     if (++row >= high) {
  41.         x = xpoint; y = ypoint;
  42.         row = draw = 0;
  43.         if (++numgen > begin)
  44.             draw = 1;
  45.         parity = numgen % freq;
  46.         if (xflag)
  47.             upd_lambda();
  48.         for (i=0; i<high; i++) {
  49.             if (pflag)
  50.                 phasediff(nextgen[i]);
  51.             else if (cflag)
  52.                 grafline(nextgen[i]);
  53.             else
  54.                 grafgen(nextgen[i]);
  55.         }
  56.         if (!cflag) {
  57.             FlushPixmap(dpy, pixmap, Data_GC, &Points, mincolor, numcolors);
  58.             y = height - y - high;
  59.             XCopyArea(dpy, pixmap, canvas, Data_GC[0], x, y, wide, high, x, y);
  60.         }
  61.         tmp = currentgen;
  62.         currentgen = nextgen;
  63.         nextgen = tmp;
  64.         if (Eflag)
  65.             adjconn();
  66.     }
  67. }
  68.  
  69. /*
  70.  *  generate the next generation.
  71.  *  now - current generation.
  72.  *  new - the next generation.
  73.  */
  74.  
  75. void
  76. iterate(now, new)
  77. double **new, **now;
  78. {
  79.     static int i, j, k, l, m, n;
  80.  
  81.     if (row == 0)
  82.         n = high - 1;
  83.     else
  84.         n = row - 1;
  85.     if (row == high - 1)
  86.         m = 0;
  87.     else
  88.         m = row + 1;
  89.     for (j=0; j<wide; j++) {
  90.           if (j == 0)
  91.             k = wide -1;
  92.           else
  93.             k = j - 1;
  94.           if (j == wide - 1)
  95.             l = 0;
  96.           else
  97.             l = j + 1;
  98.         new[row][j] = lftconn[row][j]*map(lambda[row][k],now[row][k])
  99.                     + ctrconn[row][j]*map(lambda[row][j],now[row][j])
  100.                     + rgtconn[row][j]*map(lambda[row][l],now[row][l])
  101.                     + uprconn[row][j]*map(lambda[m][j],now[m][j])
  102.                     + lwrconn[row][j]*map(lambda[n][j],now[n][j]);
  103.     }
  104. }
  105.